## Cyclic generating matrix

from PyM import*

# cyclic matrix of k rows formed with the coeffs of f
def cyclic_matrix(f,k):
    if k<1: return 'Error: {} is not positive'.format(k)
    if is_polynomial(f): f = coeffs_inc(f)
    else: f = to_list(f)
    f = f+(k-1)*[0]
    C = [f]
    for _ in range(1,k):
        f = [0] + f[:-1]
        C += [f]
    return matrix(C)

def cyclic_generating_matrix(g,n):
    if is_polynomial(g): k = n-degree(g)
    else: k = n - (len(g) - 1)
    if k<1: return 'Error: {} less than {}'.format(k,degree(g))
    return cyclic_matrix(g,k)
    

K =Zn(17)
[_,x] = polynomial_ring(K,'x')

g = 1+2*x+3*x**2+4*x**4+5*x**5

M = cyclic_matrix(g,5)
show(M)

G = cyclic_generating_matrix(g,10)

show(G)


[_,g0,g1,g2,g3,g4]=multivariate_polynomial_ring(Z_,'g0','g1','g2','g3','g4')

show(cyclic_generating_matrix([g0,g1,g2,g3,g4],8))

